package com.ccyang;

import java.util.Random;
import java.util.stream.Stream;

/**
 * @author: yangjinpeng
 * @date: 2018-12-23
 * @description: 中间操作
 */
public class StreamDemo3 {

    public static void main(String[] args) {

        String str = "my name is 007";

        // 打印单词长度
        Stream.of(str.split(" ")).map(s -> s.length()).forEach(System.out::println);
        System.out.println(
                "-------------------"
        );
        // 过滤出长度大于2的单词，然后打印单词长度
        Stream.of(str.split(" ")).filter(s -> s.length()>2).map(s -> s.length()).forEach(System.out::println);

        System.out.println(
                "----------flatMap---------"
        );
        // flatMap： A对象->B属性（是个集合），最终得到所有的A元素里的 所有B属性集合
        // intStream/longStream  并不是Stream的子类，所以要进行装箱 boxed
        Stream.of(str.split(" ")).flatMap(s -> s.chars().boxed()).forEach(
                s -> System.out.print((char)s.intValue())
        );

        System.out.println(
                "----------peek---------"
        );
        // peek用于debug。   和forEach的区别：peek是中间操作，forEach是终止操作
        Stream.of(str.split(" ")).peek(System.out::println).forEach(System.out::println);

        System.out.println(
                "----------limit---------"
        );
        // limit主要用于限制无限流
        new Random().ints().filter(i-> i > 10 && i < 100).limit(10).forEach(
                i -> System.out.println(i)
        );

    }

}
